#!/usr/bin/env python3
"""
数据库设置脚本
用于测试数据库连接和创建表结构
"""

import os
import sys
from sqlalchemy import create_engine, text
from sqlalchemy.exc import SQLAlchemyError

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from config.database import DATABASE_URL, engine
from models import Base

def test_database_connection():
    """测试数据库连接"""
    print("正在测试数据库连接...")
    try:
        # 测试连接
        with engine.connect() as connection:
            result = connection.execute(text("SELECT 1"))
            print("✅ 数据库连接成功！")
            return True
    except SQLAlchemyError as e:
        print(f"❌ 数据库连接失败: {e}")
        return False

def create_database_tables():
    """创建数据库表"""
    print("正在创建数据库表...")
    try:
        Base.metadata.create_all(bind=engine)
        print("✅ 数据库表创建成功！")
        return True
    except SQLAlchemyError as e:
        print(f"❌ 创建数据库表失败: {e}")
        return False

def show_tables():
    """显示数据库中的表"""
    print("正在查询数据库表...")
    try:
        with engine.connect() as connection:
            # 查询所有表
            result = connection.execute(text("SHOW TABLES"))
            tables = result.fetchall()
            if tables:
                print("📋 数据库中的表:")
                for table in tables:
                    print(f"  - {table[0]}")
            else:
                print("📋 数据库中没有表")
    except SQLAlchemyError as e:
        print(f"❌ 查询表失败: {e}")

def main():
    """主函数"""
    print("=" * 50)
    print("图书管理系统 - 数据库设置")
    print("=" * 50)
    
    print(f"数据库URL: {DATABASE_URL}")
    print()
    
    # 测试连接
    if not test_database_connection():
        print("\n请检查以下配置:")
        print("1. MySQL服务是否已启动")
        print("2. 数据库连接信息是否正确 (.env文件)")
        print("3. 数据库 'library_db' 是否已创建")
        print("\n创建数据库的SQL命令:")
        print("CREATE DATABASE library_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;")
        return
    
    # 创建表
    if create_database_tables():
        print()
        show_tables()
        print("\n🎉 数据库设置完成！")
        print("\n下一步:")
        print("1. 运行 init_data.sql 脚本插入初始数据")
        print("2. 或者运行 python main.py 启动应用")
    else:
        print("\n❌ 数据库设置失败")

if __name__ == "__main__":
    main()